ioctlx.arr=arr;
if ( ioctl( xc_handle, IOCTL_PRIVCMD_MMAPBATCH, &ioctlx ) < 0 )
{
+ int saved_errno = errno;
perror("XXXXXXXX");
- munmap(addr, num*PAGE_SIZE);
+ (void)munmap(addr, num*PAGE_SIZE);
+ errno = saved_errno;
return NULL;
}
return addr;
entry.npages=(size+PAGE_SIZE-1)>>PAGE_SHIFT;
if ( ioctl( xc_handle, IOCTL_PRIVCMD_MMAP, &ioctlx ) < 0 )
{
- munmap(addr, size);
+ int saved_errno = errno;
+ (void)munmap(addr, size);
+ errno = saved_errno;
return NULL;
}
return addr;
}
mmu->idx = 0;
-
- (void)munlock(mmu->updates, sizeof(mmu->updates));
+
+ safe_munlock(mmu->updates, sizeof(mmu->updates));
out:
return err;
ret = do_dom0_op(xc_handle, &op);
- (void)munlock(pfn_buf, max_pfns * sizeof(unsigned long));
+ safe_munlock(pfn_buf, max_pfns * sizeof(unsigned long));
#if 0
#ifdef DEBUG
loadimagefunc loadimage;
};
-#define ERROR(_m, _a...) \
- fprintf(stderr, "ERROR: " _m "\n" , ## _a )
-
-#define PERROR(_m, _a...) \
- fprintf(stderr, "ERROR: " _m " (%d = %s)\n" , ## _a , \
- errno, strerror(errno))
+#define ERROR(_m, _a...) \
+do { \
+ int __saved_errno = errno; \
+ fprintf(stderr, "ERROR: " _m "\n" , ## _a ); \
+ errno = __saved_errno; \
+} while (0)
+
+
+#define PERROR(_m, _a...) \
+do { \
+ int __saved_errno = errno; \
+ fprintf(stderr, "ERROR: " _m " (%d = %s)\n" , ## _a , \
+ __saved_errno, strerror(__saved_errno)); \
+ errno = __saved_errno; \
+} while (0)
+
+static inline void safe_munlock(const void *addr, size_t len)
+{
+ int saved_errno = errno;
+ (void)munlock(addr, len);
+ errno = saved_errno;
+}
static inline int do_privcmd(int xc_handle,
unsigned int cmd,
static inline int do_dom0_op(int xc_handle, dom0_op_t *op)
{
- int ret = -1, errno_saved;
+ int ret = -1;
privcmd_hypercall_t hypercall;
op->interface_version = DOM0_INTERFACE_VERSION;
" rebuild the user-space tool set?\n");
}
- errno_saved = errno;
- (void)munlock(op, sizeof(*op));
- errno = errno_saved;
+ safe_munlock(op, sizeof(*op));
out1:
return ret;
{
privcmd_hypercall_t hypercall;
long ret = -EINVAL;
- int errno_saved;
hypercall.op = __HYPERVISOR_dom_mem_op;
hypercall.arg[0] = (unsigned long)memop;
}
if ( extent_list != NULL )
- {
- errno_saved = errno;
- (void)munlock(extent_list, nr_extents*sizeof(unsigned long));
- errno = errno_saved;
- }
+ safe_munlock(extent_list, nr_extents*sizeof(unsigned long));
out1:
return ret;
{
privcmd_hypercall_t hypercall;
long ret = -EINVAL;
- int errno_saved;
hypercall.op = __HYPERVISOR_mmuext_op;
hypercall.arg[0] = (unsigned long)op;
" rebuild the user-space tool set?\n",ret,errno);
}
- errno_saved = errno;
- (void)munlock(op, nr_ops*sizeof(*op));
- errno = errno_saved;
+ safe_munlock(op, nr_ops*sizeof(*op));
out1:
return ret;